package com.naotebuk.bean;

import java.sql.SQLException;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.primefaces.context.RequestContext;

import com.naotebuk.dao.UsuarioDAO;
import com.naotebuk.entity.Usuario;
import com.naotebuk.enums.Cargo;

@ManagedBean
@SessionScoped
public class UsuariosManagedBean extends GenericManagedBean {

	// fields
	private List<Usuario> usuarios;
	private Usuario usuario;
	private Usuario usuarioSelecionado;

	// public methods
	public String incluirUsuario() {
		this.usuario = new Usuario();
		System.out.println("Incluir usuario " + usuario);
		return "";
	}
	public String alterarUsuario() {
		this.usuario = getUsuarioSelecionado();
		System.out.println("Alterar usuario " + usuario);
		return "";
	}
	public void salvar() {
		if (UsuarioDAO.save(usuario)) {
			addInfoMessage("Usuário salvo com sucesso.");
			RequestContext.getCurrentInstance().execute("dlgEdicao.hide()");
		} else 
			addErrorMessage("Não é possível salvar o usuário.");
	}
	public void excluirUsuario() {
		System.out.println("Excluindo usuario..." + getUsuarioSelecionado().getNome());
		try {
			if (getUsuarioSelecionado().getIdUsuario() == 1) {
				addErrorMessage("Não é possível excluir o usuário administrador.");
				return;
			}
			if (UsuarioDAO.delete(getUsuarioSelecionado())) {
				addInfoMessage("Usuário excluído com sucesso.");
			} else {
				addErrorMessage("Erro ao excluir usuário.");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
			
	}

	// getters
	public List<Usuario> getUsuarios() throws SQLException {
		System.out.println("Get usuários...");
		usuarios = UsuarioDAO.getUsuarios();
		return usuarios;
	}
	public Usuario getUsuario() {
		if (usuario == null)
			usuario = new Usuario();
		System.out.println("Get usuario " + usuario);
		return usuario;
	}
	public Usuario getUsuarioSelecionado() {
		System.out.println("Get usuario selecionado " + usuarioSelecionado);
		return usuarioSelecionado;
	}
	public Cargo[] getCargos() {
		return Cargo.values();
	}
	
	// setters
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		System.out.println("Set usuario selecionado " + usuarioSelecionado);
		this.usuarioSelecionado = usuarioSelecionado;
		this.usuario = usuarioSelecionado;
	}
	
}
